package io.graceland.dropwizard;
import org.junit.Test;
import com.codahale.metrics.MetricRegistry;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import io.dropwizard.setup.Environment;
import io.graceland.PlatformConfiguration;
import io.graceland.inject.Graceland;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class DropwizardModuleTest {
private PlatformConfiguration configuration = mock(PlatformConfiguration.class);
private Environment environment = mock(Environment.class);
private DropwizardModule dropwizardModule = new DropwizardModule();
@Test(expected = NullPointerException.class)
public void setup_cannot_take_null_configuration() {
dropwizardModule.setup(null, environment);
}
@Test(expected = NullPointerException.class)
public void setup_cannot_take_null_environment() {
dropwizardModule.setup(configuration, null);
}
@Test(expected = IllegalStateException.class)
public void must_set_configuration_before_providing_config() {
dropwizardModule.providePlatformConfiguration();
}
@Test(expected = IllegalStateException.class)
public void must_set_environemnt_before_providing_environment() {
dropwizardModule.provideEnvironment();
}
@Test(expected = IllegalStateException.class)
public void must_set_environment_before_providing_object_mapper() {
dropwizardModule.provideObjectMapper();
}
@Test(expected = IllegalStateException.class)
public void must_set_environment_before_providing_metric_registry() {
dropwizardModule.provideMetricRegistry();
}
@Test
public void use_environment_to_provide_object_mapper() {
dropwizardModule.setup(configuration, environment);
dropwizardModule.provideObjectMapper();
verify(environment).getObjectMapper();
}
@Test
public void use_environment_to_provide_metric_registry() {
dropwizardModule.setup(configuration, environment);
dropwizardModule.provideMetricRegistry();
verify(environment).metrics();
}
@Test
public void provides_dropwizard_components() {
ObjectMapper objectMapper = mock(ObjectMapper.class);
MetricRegistry metricRegistry = mock(MetricRegistry.class);
when(environment.getObjectMapper()).thenReturn(objectMapper);
when(environment.metrics()).thenReturn(metricRegistry);
dropwizardModule.setup(configuration, environment);
Injector injector = Guice.createInjector(dropwizardModule);
PlatformConfiguration actualConfiguration = injector.getInstance(Key.get(PlatformConfiguration.class, Graceland.class));
ObjectMapper actualObjectMapper = injector.getInstance(Key.get(ObjectMapper.class, Graceland.class));
MetricRegistry actualMetricRegistry = injector.getInstance(Key.get(MetricRegistry.class, Graceland.class));
Environment actualEnvironment = injector.getInstance(Key.get(Environment.class, Graceland.class));
assertThat(actualConfiguration, is(configuration));
assertThat(actualObjectMapper, is(objectMapper));
assertThat(actualMetricRegistry, is(metricRegistry));
assertThat(actualEnvironment, is(environment));
}
}